package co.com.smart.persistence.entity;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import co.com.smart.persistence.entity.dto.SmartCiudad;
import co.com.smart.persistence.entity.util.AbstractFacade;

/**
 * Session Bean implementation class CiudadFacade
 */
@Stateless(
		name		= "CiudadFacade", 
		mappedName 	= "ejb/CiudadFacade")
public class CiudadFacade extends AbstractFacade<SmartCiudad> implements CiudadFacadeLocal {

	@PersistenceContext(unitName = "SmartServicesPU")
	private EntityManager em;
	/**
	 * Default constructor. 
	 */
	public CiudadFacade() {
		super(SmartCiudad.class);
	}
	
	@Override
	protected EntityManager getEntityManager() {
		return em;
	}
	
	/**
	 * Lista ciudad por departamento. 
	 */
    @SuppressWarnings("unchecked")
	@Override
    public List<SmartCiudad> filtrarCiudad(SmartCiudad entity) {
    	StringBuilder  sQuery = new StringBuilder("select c from SmartCiudad c  ");
		sQuery.append(" where c.smfhretiro is null ");
		
		if (entity.getSmartDepartamento()  != null && entity.getSmartDepartamento().getSmScdepartamento() != null)
		{
			sQuery.append(" and c.smartDepartamento = :sm_scdepartamento ");			
		}			

		if(entity.getSmcousuario() != null && !"".equals(entity.getSmcousuario().trim())){
			sQuery.append(" and c.smcousuario = :sm_cousuario ");
		}
		
		if(entity.getSmdsciudad() != null && !"".equals(entity.getSmdsciudad().trim())){
			sQuery.append(" and c.smdsciudad like :sm_dsciudad ");
		}
		
		Query query = em.createQuery(sQuery.toString() );
		
		if (entity.getSmartDepartamento()  != null && entity.getSmartDepartamento().getSmScdepartamento() != null) {
			query.setParameter("sm_scdepartamento", entity.getSmartDepartamento());	
		}
		
		if(entity.getSmcousuario() != null && !"".equals(entity.getSmcousuario().trim())) {
			query.setParameter("sm_cousuario", entity.getSmcousuario().trim());
		}
		
		if(entity.getSmdsciudad() != null && !"".equals(entity.getSmdsciudad().trim())) {
			query.setParameter("sm_dsciudad", entity.getSmdsciudad().trim());
		}
		
		return query.getResultList();
    }

}
